
    k                        S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKrSSKJ	r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SSKJr  SSKJ	r  SSK J!r!  SSK"J	r#  SSK$J%r%  SSK&J'r'  SSK(J	r	  SSK(J)r)  SSK(J*r*  SSK(J+r+  SSK,J-r-  SSK.J/r/  SSK.J0r1  SSK2J3r3  SSK2J4r4  SSK5r5SSK6J7r7  SSK6J8r8  S r9S!r:S"r;S#r<S$r=S%r>S&r?S'r@ " S( S)\	R                  5      rA " S* S+\A5      rB " S, S-\A5      rC " S. S/\	R                  5      rD " S0 S1\	R                  5      rE " S2 S3\	R                  5      rF " S4 S5\	R                  5      rG " S6 S7\	R                  5      rHS8 rIS9 rJS: rKS; rLS< rMS= rNS> rO\R                  R                  S?S?4S@ jrRSA rSSB rTSC rUSD rVSSSS\%R                  SE4SF jrXSGrYg)Hz+Utility methods used by the deploy command.    )absolute_import)division)unicode_literalsN)
exceptions)ext_runtime)appengine_api_client)build)cloud_build)docker_image)metric_names)runtime_builders)util)yaml_parsing)config)fingerprinter)
enable_api)storage_util)appinfo)context_util)log)metrics)
properties)progress_tracker)creds)store)files)	platforms)filter)zipdefaultz-dot-?      iX  ap  Unable to verify that the Appengine Flexible API is enabled for project [{}]. You may not have permission to list enabled services on this project. If it is not enabled, this may cause problems in running your deployment. Please ask the project owner to ensure that the Appengine Flexible API has been enabled and that this account has permission to list enabled APIs.zNote: When deploying with a service account, the Service Management API needs to be enabled in order to verify that the Appengine Flexible API is enabled. Please ensure the Service Management API has been enabled on this project by the project owner.zEnabling the Appengine Flexible API failed on project [{}]. You may not have permission to enable APIs on this project. Please ask the project owner to enable the Appengine Flexible API on this project.c                       \ rS rSrSrSrg)Error^   zBase error for this module. N__name__
__module____qualname____firstlineno____doc____static_attributes__r&       5lib/googlecloudsdk/api_lib/app/deploy_command_util.pyr$   r$   ^   s    #r.   r$   c                       \ rS rSrSrg)PrepareFailureErrorb   r&   N)r(   r)   r*   r+   r-   r&   r.   r/   r1   r1   b   s    r.   r1   c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )WindowMaxPathErrorf   zCRaised if a file cannot be read because of the MAX_PATH limitation.a  The following file couldn't be read because its path is too long:

  [{0}]

For more information on this issue and possible workarounds, please read the
following (links are specific to Node.js, but the information is generally
applicable):

* https://github.com/Microsoft/nodejstools/issues/69
* https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#max_path-explanation-and-workaroundsc                 ^   > [         [        U ]  U R                  R	                  U5      5        g )N)superr4   __init__ _WINDOWS_MAX_PATH_ERROR_TEMPLATEformat)selffilename	__class__s     r/   r8   WindowMaxPathError.__init__v   s(    	
d,--44X>@r.   r&   )	r(   r)   r*   r+   r,   r9   r8   r-   __classcell__)r=   s   @r/   r4   r4   f   s    K&"@ @r.   r4   c                       \ rS rSrSrSrg)DockerfileError{   zARaised if a Dockerfile was found along with a non-custom runtime.r&   Nr'   r&   r.   r/   rA   rA   {   s    Ir.   rA   c                       \ rS rSrSrSrg)CloudbuildYamlError   zFRaised if a cloudbuild.yaml was found along with a non-custom runtime.r&   Nr'   r&   r.   r/   rD   rD      s    Nr.   rD   c                       \ rS rSrSrSrg)CustomRuntimeFilesError   zGRaised if a custom runtime has both a Dockerfile and a cloudbuild.yaml.r&   Nr'   r&   r.   r/   rG   rG      s    Or.   rG   c                       \ rS rSrSrSrg)NoDockerfileError   zNo Dockerfile found.r&   Nr'   r&   r.   r/   rJ   rJ      s    r.   rJ   c                       \ rS rSrSrSrg)UnsatisfiedRequirementsError   z.Raised if we are unable to detect the runtime.r&   Nr'   r&   r.   r/   rM   rM      s    6r.   rM   c                    [         R                  R                  [         R                  R                  U[        R
                  5      5      n[         R                  R                  [         R                  R                  U[        R                  R                  5      5      nU R                  S:X  a  U(       aI  U(       aB  [        SR                  [        R
                  [        R                  R                  U5      5      eU(       a'  [        R                  " S[        R
                  U5        gU(       a&  [        R                  " S[        R
                  5        g[        S5      eU(       a/  [        SR                  U R                   U R                  5      5      eU(       a/  [#        S	R                  U R                   U R                  5      5      e[        R                  " S
U R                  5        g)aK  Returns True if the given directory needs a Dockerfile for this app.

A Dockerfile is necessary when there is no Dockerfile in source_dir,
regardless of whether we generate it here on the client-side, or in Cloud
Container Builder server-side.

The reason this function is more complicated than that is that it additionally
verifies the sanity of the provided configuration by raising an exception if:

- The runtime is "custom", but no Dockerfile is present
- The runtime is not "custom", and a Dockerfile or cloudbuild.yaml is present
- The runtime is "custom", and has both a cloudbuild.yaml and a Dockerfile.

(The reason cloudbuild.yaml is tied into this method is that its use should be
mutually exclusive with the Dockerfile.)

Args:
  info: (googlecloudsdk.api_lib.app.yaml_parsing.ServiceYamlInfo). The
    configuration for the service.
  source_dir: str, the path to the service's source directory

Raises:
  CloudbuildYamlError: if a cloudbuild.yaml is present, but the runtime is not
    "custom".
  DockerfileError: if a Dockerfile is present, but the runtime is not
    "custom".
  NoDockerfileError: Raised if a user didn't supply a Dockerfile and chose a
    custom runtime.
  CustomRuntimeFilesError: if a custom runtime had both a Dockerfile and a
    cloudbuild.yaml file.

Returns:
  bool, whether Dockerfile generation is necessary.
customzcA custom runtime must have exactly one of [{}] and [{}] in the source directory; [{}] contains bothzUsing %s found in %sFz7Not using %s because cloudbuild.yaml was found instead.TzYou must provide your own Dockerfile when using a custom runtime. Otherwise provide a "runtime" field with one of the supported runtimes.a%  There is a Dockerfile in the current directory, and the runtime field in {0} is currently set to [runtime: {1}]. To use your Dockerfile to build a custom runtime, set the runtime field to [runtime: custom]. To continue using the [{1}] runtime, please remove the Dockerfile from this directory.a4  There is a cloudbuild.yaml in the current directory, and the runtime field in {0} is currently set to [runtime: {1}]. To use your cloudbuild.yaml to build a custom runtime, set the runtime field to [runtime: custom]. To continue using the [{1}] runtime, please remove the cloudbuild.yaml from this directory.z.Need Dockerfile to be generated for runtime %s)ospathexistsjoinr   
DOCKERFILEr   ResolverCLOUDBUILD_FILEruntimerG   r:   r   inforJ   rA   filerD   )rY   
source_dirhas_dockerfilehas_cloudbuilds       r/   _NeedsDockerfiler^      sw   F 77>>ggll:v0013.77>>ggll:/88HHIK.	\\X.#2396  "2";";"K"K4 
 
	hh%v'8'8*E		hhH  " 
 7 8>vdii>Bll8LM M 
C DJ6iiD'( ( HH=t||Lr.   c                 h    U R                  5       =(       a    UR                  U R                  U5      $ )ay  Returns whether we whould use runtime builders for this application build.

If there is no image that needs to be built (service.RequiresImage() ==
False), runtime builders are irrelevant, so they do not need to be built.

If there is an image that needs to be built, whether to use runtime builders
is determined by the RuntimeBuilderStrategy, based on the service runtime and
whether the service being deployed has a Dockerfile already made, or whether
it needs one built.

Args:
  service: ServiceYamlInfo, The parsed service config.
  strategy: runtime_builders.RuntimeBuilderStrategy, the strategy for
    determining whether a runtime should use runtime builders.
  needs_dockerfile: bool, whether the Dockerfile in the source directory is
    absent.

Returns:
  bool, whether to use the runtime builders.

Raises:
  ValueError: if an unrecognized runtime_builder_strategy is given
)RequiresImageShouldUseRuntimeBuildersrX   )servicestrategyneeds_dockerfiles      r/   ra   ra      s1    0 


! O

+
+GOO=M
NPr.   c                 :   [         R                  " U R                  SS9n[        R                  " X5      nU(       a7  UR                  5       nU Vs0 s H  oUR                  UR                  _M     sn$ [        SR                  U R                  5      5      es  snf )a  Returns map of in-memory Docker-related files to be packaged.

Returns the files in-memory, so that we don't have to drop them on disk;
instead, we include them in the archive sent to App Engine directly.

Args:
  info: (googlecloudsdk.api_lib.app.yaml_parsing.ServiceYamlInfo)
    The service config.
  dockerfile_dir: str, path to the directory to fingerprint and generate
    Dockerfiles for.

Raises:
  UnsatisfiedRequirementsError: Raised if the code in the directory doesn't
    satisfy the requirements of the specified runtime type.

Returns:
  A dictionary of filename relative to the archive root (str) to file contents
  (str).
T)r   deployzYour application does not satisfy all of the requirements for a runtime of type [{0}].  Please correct the errors and try again.)r   Paramsparsedr   IdentifyDirectoryGenerateConfigDatar<   contentsrM   r:   rX   )rY   dockerfile_dirparamsconfiguratordockerfilesds         r/   _GetDockerfilesrq      s    ( dkk$?&00H,113K,78KqJJ

"K88
&	%' ' 9s    Bc                    0 nSn [         R                  " U 5      n [         R                  " U5      n[        R                  " [        R                  " U5      5      U[         R                  '   U$ ! [         R                   a>  n[        R                  " UR                  [         R                  US95        Us SnA$ SnAff = f! [         a=  n[        R                  " UR                  [         R                  US95         SnAU$ SnAff = f)zGets source context file information.

Args:
  source_dir: str, path to the service's source directory
Returns:
  A dict of filename to (str) source context file contents.
zCould not generate [{name}]: {error}
Stackdriver Debugger may not be configured or enabled on this application. See https://cloud.google.com/debugger/ for more information.)nameerrorN)r   CalculateExtendedSourceContextsGenerateSourceContextErrorr   rY   r:   CONTEXT_FILENAMEBestSourceContextsix	text_typejsondumpsKeyError)r[   source_contextsmcontextsecontexts         r/   _GetSourceContextsForUploadr     s     /!;;JGH
D,,X6G58]]

76OL112 
 
	0	0 HHQXX<88XBC 
 DHHQXX<88XBCC	Ds5   A0 AC 0C3B=7C=C
D2DDc                 d    U R                  S5      n[        U5      S:X  a  US   S4$ US   US   4$ )z)Returns tuple (displayed app id, domain).:   r   N)splitlen)
project_idls     r/   _GetDomainAndDisplayIdr   7  s=    s!Vq[Q4:	
1qtr.   c                     [        U 5      u  pEU(       a  [        R                  O[        R                  R	                  UUUUUS9$ )z5Returns image tag according to App Engine convention.)
gcr_domaindisplaydomainrb   version)r   r   DOCKER_IMAGE_NAME_DOMAIN_FORMATDOCKER_IMAGE_NAME_FORMATr:   )projectrb   r   r   r   r   s         r/   _GetImageNamer   ?  sD    *73/'4:&
0
0..# 17 1r.   c                    [         R                  " X5      (       a:  [        R                  R	                  XS9n[
        R                  " X$5      (       d  U$ [         R                  " U5      n[         R                  " 5       R                  UR                  5       5      R                  5       nSR                  U5      nXSU'   U$ )a  Returns the yaml path, optionally updating gen_files.

Args:
  source_dir: str, the absolute path to the root of the application directory.
  service_path: str, the absolute path to the service YAML file
  skip_files: appengine.api.Validation._RegexStr, the validated regex object
    from the service info file.
  gen_files: dict, the dict of files to generate. May be updated if a file
    needs to be generated.

Returns:
  str, the relative path to the service YAML file that should be used for
    build.
)startz_app_{}.yaml)r   IsDirAncestorOfrQ   rR   relpathr   
ShouldSkipReadFileContentsChecksumAddContentsencode	HexDigestr:   )r[   service_path
skip_files	gen_filesrel_pathyaml_contentschecksumgenerated_paths           r/   _GetYamlPathr   K  s     :44ww|>H??:00o((6-^^))-*>*>*@AKKM(!((2.+N	r.   Fc
           	      R   [        X5      n
[        UUU
5      nUR                  5       (       d  g[        R                  R                  SR                  UR                  S95        [        [        U5      5      nU
(       a!  U(       d  UR                  [        X5      5        [        R                  " U[        XR                  XF5      S[        R                   S9n["        R$                  " [&        R(                  5        [*        R,                  R/                  X]R0                  5      n[3        X!R4                  UR6                  R8                  U5      n [:        R<                  " X#UUS9  ["        R$                  " [&        RP                  5        U(       a  [R        RT                  " XU	5      n[        RV                  " SURX                  5        UR[                  5         [\        R^                  " U5      nUR0                  US.nU	(       aL  [`        Rb                  " UR6                  S	5      n[`        Rb                  " UR6                  S	5      (       a  UUS
'   URe                  U5      nO [:        Rf                  " UR0                  5      n[:        Rh                  " UU5      n[k        UXU5      $ ! [>        [@        4 al  n[B        RD                  RG                  5       (       aC  URH                  (       a2  [K        URH                  5      [L        :  a  [O        URH                  5      ee SnAff = f)aJ  Builds and pushes a set of docker images.

Args:
  project: str, The project being deployed to.
  service: ServiceYamlInfo, The parsed service config.
  upload_dir: str, path to the service's upload directory
  source_files: [str], relative paths to upload.
  version_id: The version id to deploy these services under.
  code_bucket_ref: The reference to the GCS bucket where the source will be
    uploaded.
  gcr_domain: str, Cloud Registry domain, determines the physical location
    of the image. E.g. `us.gcr.io`.
  runtime_builder_strategy: runtime_builders.RuntimeBuilderStrategy, whether
    to use the new CloudBuild-based runtime builders (alternative is old
    externalized runtimes).
  parallel_build: bool, if True, enable parallel build and deploy.
  use_flex_with_buildpacks: bool, if true, use the build-image and
    run-image built through buildpacks.

Returns:
  BuildArtifact, Representing the pushed container image or in-progress build.

Raises:
  DockerfileError: if a Dockerfile is present, but the runtime is not
    "custom".
  NoDockerfileError: Raised if a user didn't supply a Dockerfile and chose a
    custom runtime.
  UnsatisfiedRequirementsError: Raised if the code in the directory doesn't
    satisfy the requirements of the specified runtime type.
  ValueError: if an unrecognized runtime_builder_strategy is given
Nz2Building and pushing image for service [{service}])rb   F)rl   reponocachetag)r   zUsing runtime builder [%s])_OUTPUT_IMAGE_GAE_APPLICATION_YAML_PATHpython_version_GOOGLE_RUNTIME_VERSION)6r^   ra   r`   r   statusPrintr:   moduledictr   updaterq   r   Imager   r   DOCKER_IMAGE_TAGr   CustomTimedEventr   CLOUDBUILD_UPLOAD_STARTr   ObjectReferenceFromBucketReftagged_repor   rZ   rh   r   r
   UploadSourceOSErrorIOErrorr   OperatingSystem	IsWindowsr<   r   _WINDOWS_MAX_PATHr4   CLOUDBUILD_UPLOADr   FromServiceInforY   build_file_uriWarnIfDeprecatedr   ConvertToPosixPathr   GetRuntimeConfigAttrLoadCloudBuildGetDefaultBuild
FixUpBuild_SubmitBuild)r   rb   
upload_dirsource_files
version_idcode_bucket_refr   runtime_builder_strategyparallel_builduse_flex_with_buildpacksrd   use_runtime_buildersr   image
object_refrelative_yaml_patherrbuilder_reference	yaml_path
substituter   r	   s                         r/   BuildAndPushDockerImager   f  s~   T &g:1'2J2BD
 
			 	 **:vgnnv%' .z:;)2 _W9:


..*I

!
!	#% 
<??@++99((**#J$+NN$=$=yJ
Zz'02 
<99:(8857HH)+<+K+KL&&(''(:;I**&/J  #88
..*,n		*	*7>>;K	L	L0>
,-,,Z8E ''(9(9:E

 
 

3%	eU^	<<; 7	 
  **,,	#cll+.?? ..		
s   J* *L&:A'L!!L&c                    [         R                  " [        R                  R                  R
                  R                  5       5      nU(       a6  U[        :  a,  Sn[        R                  " SR                  U[        5      5        U(       ae  [        R                  " [        R                  5        [        R                   " 5       R#                  XS9n[$        R&                  R)                  U5      $ [        R                  " [        R*                  5        [        R                   " 5       R-                  XS9  [        R                  " [        R.                  5        [$        R&                  R1                  UR2                  5      $ )aK  Builds and pushes a set of docker images.

Args:
  build: A fixed up Build object.
  image: docker_image.Image, A docker image.
  project: str, The project being deployed to.
  parallel_build: bool, if True, enable parallel build and deploy.

Returns:
  BuildArtifact, Representing the pushed container image or in-progress build.
FzProperty cloud_build_timeout configured to [{0}], which exceeds the maximum build time for parallelized beta deployments of [{1}] seconds. Performing serial deployment.)r   )r
   GetServiceTimeoutSecondsr   VALUESappcloud_build_timeoutGetMAX_PARALLEL_BUILD_TIMEr   rY   r:   r   r   r   CLOUDBUILD_EXECUTE_ASYNC_STARTcloudbuild_buildCloudBuildClientExecuteCloudBuildAsync	app_buildBuildArtifactMakeBuildIdArtifactFromOpCLOUDBUILD_EXECUTE_STARTExecuteCloudBuildCLOUDBUILD_EXECUTEMakeImageArtifactr   )r	   r   r   r   build_timeoutbuild_ops         r/   r   r     s    66//3357-}'>>NHH	1172245 \HHI002II J  H""<<XFF\BBC%%'99 :  \<<=""44U5F5FGGr.   c                    [         R                  " [        R                  5         Sn[        R
                  " U5         U R                  5         SSS5        [        R                  R                  5         [         R                  " [        R                  5        g! , (       d  f       NQ= f! [        R                   a7  n[        R                  " S[        R                  " U5      -   5         SnAN|SnAff = f)z3Call an API to prepare the for App Engine Flexible.z7If this is your first deployment, this may take a whileNzWe couldn't validate that your project is ready to deploy to App Engine Flexible Environment. If deployment fails, please check the following message and try again:
)r   r   r   PREPARE_ENV_STARTr   ProgressTrackerPrepareVmRuntimer   r   r   r   RPCErrorwarningry   rz   PREPARE_ENV)
gae_clientmessager   s      r/   DoPrepareManagedVmsr     s    	<99:EGG		)	)'	2 !!# 
3 JJ 
<334 
3	2
 
 E KK
.14s1C	DE EEs.   B+ B&B+ 
B($B+ +C6?-C11C6c                     [         R                  " U S5        g! [        R                   a|    [        R                  U 5      n[        R                  " SS9nU(       a3  [        R                  " U5      (       a  USR                  [        5      -  n[        R                  " U5         g[        R                   a    [        [        R                  U 5      5      e[         R"                   a  n[$        R&                  " USS9eSnAff = f)aj  Attempts to enable the Flexible Environment API on the project.

Possible scenarios:
-If Flexible Environment is already enabled, success.
-If Flexible Environment API is not yet enabled, attempts to enable it. If
 that succeeds, success.
-If the account doesn't have permissions to confirm that the Flexible
 Environment API is or isn't enabled on this project, succeeds with a warning.
   -If the account is a service account, adds an additional warning that
    the Service Management API may need to be enabled.
-If the Flexible Environment API is not enabled on the project and the attempt
 to enable it fails, raises PrepareFailureError.

Args:
  project: str, the project ID.

Raises:
  PrepareFailureError: if enabling the API fails with a 403 or 404 error code.
  googlecloudsdk.api_lib.util.exceptions.HttpException: miscellaneous errors
      returned by server.
zappengineflex.googleapis.comT)use_google_authz

{}zVError [{status_code}] {status_message}{error.details?
Detailed error information:
{?}})error_formatN)r   EnableServiceIfDisableds_exceptions#GetServicePermissionDeniedExceptionFLEXIBLE_SERVICE_VERIFY_WARNINGr:   c_storeLoadIfEnabledr   IsServiceAccountCredentials,FLEXIBLE_SERVICE_VERIFY_WITH_SERVICE_ACCOUNTr   r   EnableServiceExceptionr1   PREPARE_FAILURE_MSGapitools_exceptions	HttpErrorapi_lib_exceptionsHttpException)r   r   
credentialr   s       r/   PossiblyEnableFlexr    s    ,C&&w'EG		9	9 	 .44W=G &&t<Je77
CC!MNNgKK		,	, C 188A
BB		&	& C 
*
* AC CCs    BD)AD-DDc                 z   U R                   (       a+  U R                  R                  (       d  [        R                  $ U R                  R                   H;  n [
        R                  " UR                  S-   S5      (       a  UR                  s  $ M=     [        R                  $ ! [
        R                   a     Mf  f = f)a  Returns whether the root URL for an application is served over HTTPS.

More specifically, returns the 'secure' setting of the handler that will serve
the application. This can be 'always', 'optional', or 'never', depending on
when the URL is served over HTTPS.

Will miss a small number of cases, but HTTP is always okay (an HTTP URL to an
HTTPS-only service will result in a redirect).

Args:
  service_info: ServiceYamlInfo, the service configuration.

Returns:
  str, the 'secure' setting of the handler for the root URL.
$/)is_ti_runtimerh   handlersr   SECURE_HTTP_OR_HTTPSrematchurlsecurert   SECURE_HTTP)service_infohandlers     r/   UseSslr  8  s      (;(;(D(D'''$$--g	'++#S	)	)~~ 
* . 
			 88  s   4B""B:9B:Tc                    U (       d  U(       d  [        S5      eU=(       d    SnU=(       d    SnU[        :X  a  SnU (       d.  [        R                  R	                  5       nUR                  5       n U (       a  U R                  R                  SS5      u  p[        [        [        X6U/5      5      n	Sn
U[        R                  :X  a  SR                  U	5      nSn
GO[        R                  U	5      n[        U5      [         ::  a  Sn
OU(       ap  / SQn[        R                  [#        X6U/U5       VVs/ s H  u  pU(       d  M  UPM     snn5      nSR%                  UU[         5      n[&        R(                  " U5        SR                  U	5      nU[        R*                  :X  a  Sn
ODU[        R,                  :X  a0  U(       d'  S	R%                  U5      n[&        R(                  " U5        Sn
S
R%                  XW5      $ s  snnf )aX  Returns the hostname of the given version of the deployed app.

Args:
  app: Application resource. One of {app, app_id} must be given.
  app_id: str, project ID. One of {app, app_id} must be given. If both are
    provided, the hostname from app is preferred.
  service: str, the (optional) service being deployed
  version: str, the deployed version ID (omit to get the default version URL).
  use_ssl: bool, whether to construct an HTTPS URL.
  deploy: bool, if this is called during a deployment.

Returns:
  str. Constructed URL.

Raises:
  TypeError: if neither an app nor an app_id is provided
z7Must provide an application resource or application ID. .r   httphttps)z$VERSION_IDz$SERVICE_IDz$APP_IDa  This deployment will result in an invalid SSL certificate for service [{0}]. The total length of your subdomain in the format {1} should not exceed {2} characters. Please verify that the certificate corresponds to the parent domain of your application when you connect.z@Most browsers will reject the SSL certificate for service [{0}].z{0}://{1}.{2})	TypeErrorDEFAULT_SERVICEr   AppengineApiClientGetApiClientGetApplicationdefaultHostnamer   listr   boolr   r  rT   ALT_SEPARATORr   MAX_DNS_LABEL_LENGTHr   r:   r   r   r  SECURE_HTTPS)r   app_idrb   r   use_sslrf   service_name
api_clientr   subdomain_partsscheme	subdomainformat_partsijsubdomain_formatmsgs                    r/   GetAppHostnamer6  U  s   & 
V
M
NNMr'B,L	%88EEGJ

#
#
%C((..sA6NF wf&EFG/&###)IF""?3I
9~--f	@(-- '!@,O O6A O / 17w7G7K1M	 	 	C((?+i	G00	0g***"#)6'? 
++c
			6	::)s   2G<
G<
zapp.yaml)Zr,   
__future__r   r   r   r{   rQ   r  apitools.base.pyr   r  gae_ext_runtimer   googlecloudsdk.api_lib.appr   r	   r   r
   r   r   r   r   r   !googlecloudsdk.api_lib.app.imagesr   #googlecloudsdk.api_lib.app.runtimesr   !googlecloudsdk.api_lib.cloudbuildr   googlecloudsdk.api_lib.servicesr   r   googlecloudsdk.api_lib.storager   googlecloudsdk.api_lib.utilr  googlecloudsdk.appengine.apir   googlecloudsdk.appengine.toolsr   googlecloudsdk.corer   r   r   googlecloudsdk.core.consoler   googlecloudsdk.core.credentialsr   r   r   googlecloudsdk.core.utilr   r   ry   	six.movesr   r   r   r'  r(  r   r   r   r  r  r$   r1   r4   rA   rD   rG   rJ   rM   r^   ra   rq   r   r   r   r   RuntimeBuilderStrategyNEVERr   r   r   r  r  r  r6  DEFAULT_DEPLOYABLEr&   r.   r/   <module>rK     s    2 &  '  	 	 > ' ; 9 2 3 3 7 + 3 4 = G 6 F 7 H 0 7 * # ' * 8 1 < * . 
   
  
    , -N $J $% @ @*Jj&& JO*** OPj.. P
(( 7:#3#3 7L^P8'@:	F .DDJJ"h=V HF5(-C`: D$"..tN;b   r.   